
namespace my_reverse_iterator
{
	template<class Iterator>
	struct reverse_iterator
	{
		typedef typename Iterator::Ref Ref;
		typedef typename Iterator::Ptr Ptr;
		typedef typename reverse_iterator<Iterator> Self;

		reverse_iterator() {};//空的构造
		reverse_iterator(Iterator it) : it1(it)//用Iterator构造
		{

		}

		Ref operator*() const//解引用操作，去调用it1的解引用
		{
			return *it1;
		}

		Ptr operator->() const//->操作，去调用it1的operator->操作
		{
			return &(*it1);
		}

		Self& operator--()//前置-- 前置--，去调用it1的前置或者后置++均可
		{
			++it1;
			return *this;
		}

		Self operator--(int)//后置-- 后置--，去调用it1的前置或者后置++均可，要提前保存没有++的it1，然后返回
		{
			Self tmp(it1);
			++it1;

			return tmp;
		}

		Self& operator++()//前置++ 和前置--类似
		{
			--it1;
			return *this;
		}

		Self& operator++(int)//后置++ 和后置--类似
		{
			Self tmp(it1);

			--it1;

			return tmp;
		}

		bool operator!=(const Self& x)//调用it1 的!= 操作
		{
			return it1 != x.it1;
		}

		bool operator==(const Self& x)//调用it1 的 == 操作
		{
			return it1 == x.it1;
		}
	private:
		Iterator it1;//创建Iterator类型的it1对象，复用这个类型的操作
	};
}